home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / webbrowser.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  11KB  |  396 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. '''Interfaces for launching and remotely controlling Web browsers.'''
  5. import os
  6. import sys
  7. __all__ = [
  8.     'Error',
  9.     'open',
  10.     'get',
  11.     'register']
  12.  
  13. class Error(Exception):
  14.     pass
  15.  
  16. _browsers = { }
  17. _tryorder = []
  18.  
  19. def register(name, klass, instance = None):
  20.     '''Register a browser connector and, optionally, connection.'''
  21.     _browsers[name.lower()] = [
  22.         klass,
  23.         instance]
  24.  
  25.  
  26. def get(using = None):
  27.     '''Return a browser launcher instance appropriate for the environment.'''
  28.     if using is not None:
  29.         alternatives = [
  30.             using]
  31.     else:
  32.         alternatives = _tryorder
  33.     for browser in alternatives:
  34.         if '%s' in browser:
  35.             return GenericBrowser(browser)
  36.             continue
  37.         
  38.         try:
  39.             command = _browsers[browser.lower()]
  40.         except KeyError:
  41.             command = _synthesize(browser)
  42.  
  43.         if command[1] is None:
  44.             return command[0]()
  45.             continue
  46.         return command[1]
  47.     
  48.     raise Error('could not locate runnable browser')
  49.  
  50.  
  51. def open(url, new = 0, autoraise = 1):
  52.     get().open(url, new, autoraise)
  53.  
  54.  
  55. def open_new(url):
  56.     get().open(url, 1)
  57.  
  58.  
  59. def _synthesize(browser):
  60.     """Attempt to synthesize a controller base on existing controllers.
  61.  
  62.     This is useful to create a controller when a user specifies a path to
  63.     an entry in the BROWSER environment variable -- we can copy a general
  64.     controller to operate using a specific installation of the desired
  65.     browser in this way.
  66.  
  67.     If we can't create a controller in this way, or if there is no
  68.     executable for the requested browser, return [None, None].
  69.  
  70.     """
  71.     if not os.path.exists(browser):
  72.         return [
  73.             None,
  74.             None]
  75.     
  76.     name = os.path.basename(browser)
  77.     
  78.     try:
  79.         command = _browsers[name.lower()]
  80.     except KeyError:
  81.         return [
  82.             None,
  83.             None]
  84.  
  85.     controller = command[1]
  86.     if controller and name.lower() == controller.basename:
  87.         import copy as copy
  88.         controller = copy.copy(controller)
  89.         controller.name = browser
  90.         controller.basename = os.path.basename(browser)
  91.         register(browser, None, controller)
  92.         return [
  93.             None,
  94.             controller]
  95.     
  96.     return [
  97.         None,
  98.         None]
  99.  
  100.  
  101. def _iscommand(cmd):
  102.     '''Return True if cmd can be found on the executable search path.'''
  103.     path = os.environ.get('PATH')
  104.     if not path:
  105.         return False
  106.     
  107.     for d in path.split(os.pathsep):
  108.         exe = os.path.join(d, cmd)
  109.         if os.path.isfile(exe):
  110.             return True
  111.             continue
  112.     
  113.     return False
  114.  
  115. PROCESS_CREATION_DELAY = 4
  116.  
  117. class GenericBrowser:
  118.     
  119.     def __init__(self, cmd):
  120.         (self.name, self.args) = cmd.split(None, 1)
  121.         self.basename = os.path.basename(self.name)
  122.  
  123.     
  124.     def open(self, url, new = 0, autoraise = 1):
  125.         command = '%s %s' % (self.name, self.args)
  126.         os.system(command % url)
  127.  
  128.     
  129.     def open_new(self, url):
  130.         self.open(url)
  131.  
  132.  
  133.  
  134. class Netscape:
  135.     '''Launcher class for Netscape browsers.'''
  136.     
  137.     def __init__(self, name):
  138.         self.name = name
  139.         self.basename = os.path.basename(name)
  140.  
  141.     
  142.     def _remote(self, action, autoraise):
  143.         raise_opt = ('-noraise', '-raise')[autoraise]
  144.         cmd = "%s %s -remote '%s' >/dev/null 2>&1" % (self.name, raise_opt, action)
  145.         rc = os.system(cmd)
  146.         if rc:
  147.             import time as time
  148.             os.system('%s &' % self.name)
  149.             time.sleep(PROCESS_CREATION_DELAY)
  150.             rc = os.system(cmd)
  151.         
  152.         return not rc
  153.  
  154.     
  155.     def open(self, url, new = 0, autoraise = 1):
  156.         if new:
  157.             self._remote('openURL(%s,new-window)' % url, autoraise)
  158.         else:
  159.             self._remote('openURL(%s)' % url, autoraise)
  160.  
  161.     
  162.     def open_new(self, url):
  163.         self.open(url, 1)
  164.  
  165.  
  166.  
  167. class Galeon:
  168.     '''Launcher class for Galeon browsers.'''
  169.     
  170.     def __init__(self, name):
  171.         self.name = name
  172.         self.basename = os.path.basename(name)
  173.  
  174.     
  175.     def _remote(self, action, autoraise):
  176.         raise_opt = ('--noraise', '')[autoraise]
  177.         cmd = '%s %s %s >/dev/null 2>&1' % (self.name, raise_opt, action)
  178.         rc = os.system(cmd)
  179.         if rc:
  180.             import time
  181.             os.system('%s >/dev/null 2>&1 &' % self.name)
  182.             time.sleep(PROCESS_CREATION_DELAY)
  183.             rc = os.system(cmd)
  184.         
  185.         return not rc
  186.  
  187.     
  188.     def open(self, url, new = 0, autoraise = 1):
  189.         if new:
  190.             self._remote("-w '%s'" % url, autoraise)
  191.         else:
  192.             self._remote("-n '%s'" % url, autoraise)
  193.  
  194.     
  195.     def open_new(self, url):
  196.         self.open(url, 1)
  197.  
  198.  
  199.  
  200. class Konqueror:
  201.     '''Controller for the KDE File Manager (kfm, or Konqueror).
  202.  
  203.     See http://developer.kde.org/documentation/other/kfmclient.html
  204.     for more information on the Konqueror remote-control interface.
  205.  
  206.     '''
  207.     
  208.     def __init__(self):
  209.         if _iscommand('konqueror'):
  210.             self.name = self.basename = 'konqueror'
  211.         else:
  212.             self.name = self.basename = 'kfm'
  213.  
  214.     
  215.     def _remote(self, action):
  216.         cmd = 'kfmclient %s >/dev/null 2>&1' % action
  217.         rc = os.system(cmd)
  218.         if rc:
  219.             import time
  220.             if self.basename == 'konqueror':
  221.                 os.system(self.name + ' --silent &')
  222.             else:
  223.                 os.system(self.name + ' -d &')
  224.             time.sleep(PROCESS_CREATION_DELAY)
  225.             rc = os.system(cmd)
  226.         
  227.         return not rc
  228.  
  229.     
  230.     def open(self, url, new = 1, autoraise = 1):
  231.         self._remote("openURL '%s'" % url)
  232.  
  233.     open_new = open
  234.  
  235.  
  236. class Grail:
  237.     
  238.     def _find_grail_rc(self):
  239.         import glob as glob
  240.         import pwd as pwd
  241.         import socket as socket
  242.         import tempfile as tempfile
  243.         tempdir = os.path.join(tempfile.gettempdir(), '.grail-unix')
  244.         user = pwd.getpwuid(os.getuid())[0]
  245.         filename = os.path.join(tempdir, user + '-*')
  246.         maybes = glob.glob(filename)
  247.         if not maybes:
  248.             return None
  249.         
  250.         s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
  251.         for fn in maybes:
  252.             
  253.             try:
  254.                 s.connect(fn)
  255.             except socket.error:
  256.                 
  257.                 try:
  258.                     os.unlink(fn)
  259.                 except IOError:
  260.                     pass
  261.                 except:
  262.                     None<EXCEPTION MATCH>IOError
  263.                 
  264.  
  265.                 None<EXCEPTION MATCH>IOError
  266.  
  267.             return s
  268.         
  269.  
  270.     
  271.     def _remote(self, action):
  272.         s = self._find_grail_rc()
  273.         if not s:
  274.             return 0
  275.         
  276.         s.send(action)
  277.         s.close()
  278.         return 1
  279.  
  280.     
  281.     def open(self, url, new = 0, autoraise = 1):
  282.         if new:
  283.             self._remote('LOADNEW ' + url)
  284.         else:
  285.             self._remote('LOAD ' + url)
  286.  
  287.     
  288.     def open_new(self, url):
  289.         self.open(url, 1)
  290.  
  291.  
  292.  
  293. class WindowsDefault:
  294.     
  295.     def open(self, url, new = 0, autoraise = 1):
  296.         os.startfile(url)
  297.  
  298.     
  299.     def open_new(self, url):
  300.         self.open(url)
  301.  
  302.  
  303. if os.environ.get('TERM') or os.environ.get('DISPLAY'):
  304.     _tryorder = [
  305.         'links',
  306.         'lynx',
  307.         'w3m']
  308.     if os.environ.get('TERM'):
  309.         if _iscommand('links'):
  310.             register('links', None, GenericBrowser("links '%s'"))
  311.         
  312.         if _iscommand('lynx'):
  313.             register('lynx', None, GenericBrowser("lynx '%s'"))
  314.         
  315.         if _iscommand('w3m'):
  316.             register('w3m', None, GenericBrowser("w3m '%s'"))
  317.         
  318.     
  319.     if os.environ.get('DISPLAY'):
  320.         _tryorder = [
  321.             'galeon',
  322.             'skipstone',
  323.             'mozilla-firefox',
  324.             'mozilla-firebird',
  325.             'mozilla',
  326.             'netscape',
  327.             'kfm',
  328.             'grail'] + _tryorder
  329.         for browser in ('mozilla-firefox', 'mozilla-firebird', 'mozilla', 'netscape'):
  330.             if _iscommand(browser):
  331.                 register(browser, None, Netscape(browser))
  332.                 continue
  333.         
  334.         if _iscommand('mosaic'):
  335.             register('mosaic', None, GenericBrowser("mosaic '%s' >/dev/null &"))
  336.         
  337.         if _iscommand('galeon'):
  338.             register('galeon', None, Galeon('galeon'))
  339.         
  340.         if _iscommand('skipstone'):
  341.             register('skipstone', None, GenericBrowser("skipstone '%s' >/dev/null &"))
  342.         
  343.         if _iscommand('kfm') or _iscommand('konqueror'):
  344.             register('kfm', Konqueror, Konqueror())
  345.         
  346.         if _iscommand('grail'):
  347.             register('grail', Grail, None)
  348.         
  349.     
  350.  
  351.  
  352. class InternetConfig:
  353.     
  354.     def open(self, url, new = 0, autoraise = 1):
  355.         ic.launchurl(url)
  356.  
  357.     
  358.     def open_new(self, url):
  359.         self.open(url)
  360.  
  361.  
  362. if sys.platform[:3] == 'win':
  363.     _tryorder = [
  364.         'netscape',
  365.         'windows-default']
  366.     register('windows-default', WindowsDefault)
  367.  
  368.  
  369. try:
  370.     import ic
  371. except ImportError:
  372.     pass
  373.  
  374. _tryorder = [
  375.     'internet-config']
  376. register('internet-config', InternetConfig)
  377. if sys.platform[:3] == 'os2' and _iscommand('netscape.exe'):
  378.     _tryorder = [
  379.         'os2netscape']
  380.     register('os2netscape', None, GenericBrowser('start netscape.exe %s'))
  381.  
  382. if 'BROWSER' in os.environ:
  383.     _tryorder[0:0] = os.environ['BROWSER'].split(os.pathsep)
  384.  
  385. for cmd in _tryorder:
  386.     if cmd.lower() not in _browsers:
  387.         if _iscommand(cmd.lower()):
  388.             register(cmd.lower(), None, GenericBrowser("%s '%%s'" % cmd.lower()))
  389.         
  390.     _iscommand(cmd.lower())
  391.  
  392. cmd = None
  393. del cmd
  394. _tryorder = filter((lambda x: if not x.lower() in _browsers:
  395. passx.find('%s') > -1), _tryorder)
  396.